package cn.cai.mapper;

import cn.cai.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;


@Mapper
public interface UserMapper{
    // 只根据用户名查询用户。密码的验证，在内存中处理

    /**
     * Mybatis中的参数问题：
     *  如果只有唯一一个参数，且参数可用。可以直接应用。
     *      参数可用，代表，参数类型是简单类型。8种基本类型，对应包装类型，字符串类型
     *      参数命名任意，#{任意命名} 或者 ${任意命名}
     *  如果有多个参数，且参数类型为简单类型（8种基本类型，包装类型，字符串）。
     *      参数可以使用下标序号访问。如#{0}，#{1}。不推荐使用
     *  如果参数类型是之定义类型，或Map类型，需要提供@Param描述参数。
     *      代表为参数定义一个名称，可以再SQL中使用。
     *      如：@Param("abc") String name  ->  #{abc}
     *      如：@Param("ddd") Map abc -> #{ddd.key}
     *      如：@Param("xyz") User user -> #{xyz.property}
     * @param userName
     * @return
     */
    @Select("select * from user where username = #{userName}")
    User selectUserByUserName(String userName);

    // 根据用户主键，查询角色名称，role(role_name)
    @Select("select role_name from role where  id in (select role_id from user_role where user_id = #{id})")
    List<String> selectRolesByUserId(Integer id);

    // 根据用户主键，查询资源描述，resource(res)
    @Select("select res from resource where id in (select res_id from role_res where role_id in (select role_id from user_role where user_id = #{id}))")
    List<String> selectResourcesByUserId(Integer id);
}
